24.6.5. Merging YAML Lists
24.6.5 合并YAML列表
正如之前展示的,所有YAML最终都转换为properties,在通过一个profile覆盖"list"属性时这个过程可能不够直观(counter intuitive)。例如,假设有一个MyPojo
对象,默认它的name
和description
属性都为null
。下面的例子从AcmeProperties
暴露一个MyPojo
对象列表(list):
@ConfigurationProperties("acme")
public class AcmeProperties {
private final List<MyPojo> list = new ArrayList<>();
public List<MyPojo> getList() {
return this.list;
}
}
考虑如下配置:
acme:
list:
- name: my name
description: my description
---
spring:
profiles: dev
acme:
list:
- name: my another name
如果dev
profile没有激活,AcmeProperties.list
将包括一个如之前定义的MyPojo
实体。即使dev
生效,该list
仍旧只包含一个实体(name
值为my another name
,description
值为null
)。此配置不会向该列表添加第二个MyPojo
实例,也不会对该项进行合并。
当一个集合定义在多个profiles时,只使用优先级最高的。考虑下面的例子:
acme:
list:
- name: my name
description: my description
- name: another name
description: another description
---
spring:
profiles: dev
acme:
list:
- name: my another name
在之前的示例中,如果dev
profile激活,AcmeProperties.list
将包含一个MyPojo
实体(name
值为my another name
,description
值为null
)。